package tsing.javase.quartz.job;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import org.quartz.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import tsing.javase.util.SpringContextUtils;

import java.util.Map;

//保存在JobDataMap传递的参数
@PersistJobDataAfterExecution
//保证多个任务间不会同时执行
@DisallowConcurrentExecution
public class VipNewAlarmJob implements Job {
    public static final Logger logger = LoggerFactory.getLogger("vipnewalarm");
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        logger.info("进入会员新告警JOB!!!");
        // 逻辑 ：执行sql ,根据返回结果发送短信
        // 0.获取JobDataMap中保存的SQLa
        JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
        // 获取告警接收人
        String phone = (String) (jobDataMap.get("phone"));
        // 获取执行SQl
        String excelSql = (String) (jobDataMap.get("excelSql"));

        // 获取参数列表
        String params = (String) (jobDataMap.get("params"));
        // 获取可替换参数
        Map replaceParams = (Map) jobDataMap.get("replaceParams");
        String reparms = JSON.toJSONString(replaceParams);
        // 获取任务名称
        String name = (String) (jobDataMap.get("name"));
        // 获取短信模板id
        String contentId = (String) (jobDataMap.get("contentId"));

        if(StrUtil.isBlank(contentId)){
            logger.error("老会员平台新告警任务：{} ，短信模板id未配置，结束执行", name);
            throw new JobExecutionException("老会员平台新告警任务" + name + "短信模板id未配置，结束执行");
        }

        logger.info("老会员平台新告警任务：{} ，start执行！！！", name);
        if (StrUtil.isBlank(excelSql)) {
            logger.error("老会员平台新告警任务：{} ，执行SQL配置为空，结束执行", name);
            throw new JobExecutionException("老会员平台新告警任务" + name + "执行SQL配置为空，结束执行");
        }
        if (StrUtil.isBlank(params)) {
            logger.error("老会员平台新告警任务：{} ，参数列表配置为空，结束执行", name);
            throw new JobExecutionException("老会员平台新告警任务" + name + "参数列表配置为空，结束执行");
        }

        String[] var;
        try {
            var = params.split(",");
        } catch (Exception e) {
            throw new JobExecutionException("老会员平台新告警任务" + name + "参数列表配置出错，结束执行");
        }
        // 1.执行sql
        VipAlarmDao dao = SpringContextUtils.getBean(VipAlarmDao.class);
        String flag = null;
        try {
            flag = dao.excelMethod(excelSql);
            logger.info("sql执行成功");
        } catch (Exception e) {
            logger.error("老会员平台新告警任务：{} ，SQl：{},执行失败，原因是：{}",name,excelSql,e);
        }
        // 2.判断返回结果
        if ("1".equals(flag)) {
            logger.info("老会员平台新告警任务：{},达到告警预警，开始下发告警短信",name);
            // 出现告警，发送短信
        }
        logger.info("老会员平台新告警任务：{} ，end执行！！！", name);

    }

}
